home *** CD-ROM | disk | FTP | other *** search
/ Aminet 34 / Aminet 34 (2000)(Schatztruhe)[!][Dec 1999].iso / Aminet / util / pack / agf.lha / agf.c next >
Encoding:
C/C++ Source or Header  |  1999-09-06  |  1.7 KB  |  105 lines

  1. #ifndef _AGF_H_
  2. #include <agf.h>
  3. #endif
  4.  
  5. #define MAX_COFS 32
  6.  
  7. void compress(FILE *in, FILE *out, int r, int mode)
  8. {
  9.  
  10.    quick a[MAX_COFS];
  11.    quick x[MAX_COFS];
  12.    quick y, e, z;
  13.    float te, fe;
  14.    int i, count;
  15.    char ch, che;
  16.    char flag ;
  17.  
  18.  
  19.    count = 10000;
  20.    for (i=0; i<MAX_COFS;i++) {
  21.       a[i] = 0;
  22.       x[i] = 0;
  23.    }
  24.    if (r!=1) {
  25.       a[0] = 1;
  26.       a[1] = 0;
  27.       a[2] = 0;
  28.    }
  29.  
  30.  
  31.    if (r==1)
  32.       printf("Gradient Descent Adaptation On\n");
  33.  
  34.  
  35.    che = 0;
  36.    ch = 0;
  37.    z = 0;
  38.    flag = 0;
  39.    y = 0;
  40.    while (!feof(in)) {
  41.  
  42.       /* Pass data to FIR inputs */
  43.       for (i=(MAX_COFS-1); i>0; i--) {
  44.          x[i] = x[i-1];
  45.       }
  46.       x[0] = z;
  47.  
  48.       /* Get FIR output */
  49.       y = fir_out(x, a, MAX_COFS);
  50.  
  51.       ch = getc(in);
  52.       if (!feof(in)) {
  53.          if (mode==0) {
  54.             z = c2Quick(ch);
  55.             e = y - z;
  56.             che = Quick2c(e);
  57.             e = c2Quick(che);
  58.          }else{
  59.             /*z = y + e;
  60.             e = c2Quick(ch);
  61.             che = Quick2c(z);
  62.             z = c2Quick(che);*/
  63.             //y = fir_out(x, a, MAX_COFS);
  64.             e = c2Quick(ch);
  65.             z =  y - e;
  66.             che = Quick2c(z);
  67.             z = c2Quick(che);
  68.          }
  69.  
  70.  
  71.       putc(che, out);
  72.       if (r==1)
  73.          gradient_descent(x, a, MAX_COFS, -e);
  74.  
  75.  
  76.          /* Calculate total error */
  77.          te =te + ((float) abs(che));
  78.          count--;
  79.          if (count<=0) {
  80.             count = 10000;
  81.             te = te/12800;
  82.             printf("E: %f pc\n",te);
  83.             te = 0;
  84.          }
  85.       }
  86.    }
  87.    for (i=0;i<MAX_COFS;i++) {
  88.       #ifdef INTQUICK
  89.       fe = (float) a[i];
  90.       fe = fe/256;
  91.       printf("%f\n",fe);
  92.       #else
  93.       printf("%f\n",a[i]);
  94.       #endif
  95.    }
  96.  
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.